# 需求：自定义一个 FastDFS 文件存储类
from django.core.files.storage import Storage, FileSystemStorage
from fdfs_client.client import Fdfs_client
from django.conf import settings
from rest_framework.exceptions import APIException


class FastDFSStorage(Storage):
    """FastDFS文件存储类"""
    def _save(self, name, content):
        """
        作用：决定使用当前文件存储类进行文件保存时，文件存储到哪里
        name：上传文件的名称
        content：文件对象，通过 content.read() 可以获取上传文件的内容
        """
        # 实现代码，将上传的文件存储到 FastDFS 系统中
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)

        ret = client.upload_by_buffer(content.read())

        # 判断上传是否成功
        if ret.get('Status') != 'Upload successed.':
            raise APIException('上传文件到FastDFS失败')

        # 上传成功，返回文件id
        file_id = ret.get('Remote file_id')
        return file_id

    def exists(self, name):
        """
        作用：判断当前上传的文件和文件系统中原有的文件名是否会冲突
        name：上传文件的名称
        """
        return False

    def url(self, name):
        """
        作用：返回可以访问到上传文件的完整的URL地址
        name：表中文件字段存储的内容
        """
        return settings.FDFS_URL + name
